package com.ruoyi.myResitExam.service.impl;

import java.util.List;
import java.math.BigDecimal;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.exception.ServiceException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.resitExam.mapper.SysResitExamMapper;
import com.ruoyi.resitExam.domain.SysResitExam;
import com.ruoyi.myResitExam.service.IMyResitExamService;

/**
 * 我的补考Service业务层处理
 * 
 * @author ruoyi
 * @date 2023-05-06
 */
@Service
public class MyResitExamServiceImpl implements IMyResitExamService {
  @Autowired
  private SysResitExamMapper sysResitExamMapper;

  /**
   * 查询我的补考
   * 
   * @param resitId 补考ID
   * @param userId  用户ID
   * @return 补考信息
   */
  @Override
  public SysResitExam selectMyResitExamByResitId(Integer resitId, Long userId) {
    SysResitExam resitExam = sysResitExamMapper.selectSysResitExamByResitId(resitId);
    // 验证是否为当前用户的补考记录
    if (resitExam != null && !userId.equals(resitExam.getUserId())) {
      throw new ServiceException("您无权查看他人的补考记录");
    }
    return resitExam;
  }

  /**
   * 查询我的补考列表
   * 
   * @param sysResitExam 补考信息
   * @return 补考集合
   */
  @Override
  public List<SysResitExam> selectMyResitExamList(SysResitExam sysResitExam) {
    // 确保只查询当前用户的补考记录
    if (sysResitExam.getUserId() == null) {
      throw new ServiceException("用户ID不能为空");
    }
    return sysResitExamMapper.selectSysResitExamList(sysResitExam);
  }

  /**
   * 新增我的补考
   * 
   * @param sysResitExam 补考信息
   * @return 结果
   */
  @Override
  public int insertMyResitExam(SysResitExam sysResitExam) {
    // 验证原始成绩必须小于60分才能参加补考
    if (sysResitExam.getOriginalScore() == null
        || sysResitExam.getOriginalScore().compareTo(new BigDecimal("60")) >= 0) {
      throw new ServiceException("只有不及格（原始成绩小于60分）的学生才能参加补考");
    }

    // 确保只有当前用户可以申请自己的补考
    if (sysResitExam.getUserId() == null) {
      throw new ServiceException("用户ID不能为空");
    }

    sysResitExam.setCreateTime(DateUtils.getNowDate());
    return sysResitExamMapper.insertSysResitExam(sysResitExam);
  }

  /**
   * 取消我的补考申请
   * 
   * @param resitId 补考ID
   * @param userId  用户ID
   * @return 结果
   */
  @Override
  public int cancelMyResitExam(Integer resitId, Long userId) {
    // 查询补考记录
    SysResitExam resitExam = sysResitExamMapper.selectSysResitExamByResitId(resitId);
    if (resitExam == null) {
      throw new ServiceException("补考记录不存在");
    }

    // 验证是否为当前用户的补考记录
    if (!userId.equals(resitExam.getUserId())) {
      throw new ServiceException("您无权取消他人的补考申请");
    }

    // 验证补考状态是否为待审核
    if (!"0".equals(resitExam.getResitStatus())) {
      throw new ServiceException("只有待审核状态的补考申请才能取消");
    }

    // 删除补考记录
    return sysResitExamMapper.deleteSysResitExamByResitId(resitId);
  }
}